package com.org.manhu.chargehelper.update;

import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 * @文件名：ParseXml.java
 * @包名：com.coward.callbackwebservice
 * @作者：李朋辉 @QQ：892839211
 * @创建时间：2015年2月28日 上午9:41:47
 *
 * @描述：
 */
public class ParseXml {

	/**
	 * @描述：解析从服务器上读取到的版本文档,由于XML文件比较小，因此使用DOM方式进行解析
	 * @param in
	 * @return
	 * @throws Exception
	 */
	public static UpdateInfo parseXml(InputStream in) throws Exception {
		UpdateInfo updateInfo = null;
		// 实例化一个文档构建器工厂
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		// 通过文档构建器工厂获取一个文档构建器
		DocumentBuilder builder = factory.newDocumentBuilder();
		// 通过文档通过文档构建器构建一个文档实例
		Document document = builder.parse(in);
		// 获取XML文件根节点
		Element root = document.getDocumentElement();
		// 获得所有子节点
		NodeList childNodes = root.getChildNodes();

		String appName = null;
		int versionCode = -1;
		String versionName = null;
		String downUrl = null;
		String description = null;

		for (int j = 0; j < childNodes.getLength(); j++) {
			Node childNode = childNodes.item(j);
			if (childNode.getNodeType() == Node.ELEMENT_NODE) {
				Element childElement = (Element) childNode;
				if ("appName".equals(childElement.getNodeName())) {
					appName = childElement.getFirstChild().getNodeValue();
				} else if ("versionCode".equals(childElement.getNodeName())) {
					versionCode = Integer.parseInt(childElement.getFirstChild()
							.getNodeValue());
				} else if (("versionName".equals(childElement.getNodeName()))) {
					versionName = childNode.getFirstChild().getNodeValue();
				} else if (("downUrl".equals(childElement.getNodeName()))) {
					downUrl = childElement.getFirstChild().getNodeValue();
				} else if ("description".equals(childElement.getNodeName())) {
					description = childElement.getFirstChild().getNodeValue();
				}
			}
		}
		updateInfo = new UpdateInfo(appName, versionCode, versionName, downUrl,
				description);
		return updateInfo;
	}

}
